<?php

namespace app\admin\controller;

use think\Controller;

use think\Db;

class Base extends Controller
{
	protected  static $userNode;
    //初始化加载
	public function _initialize(){

		$this->isLogin();
		$this->getUserNode();
	}
    //查询当前登录的用户权限
	public function getUserNode(){
    	//取出session中的用户id
		$user_id = session('user_id');
		if(session('userNade') == null){
    		//根据用户id 查询权限 主表：u_r 条件：u_id = $user_id 关联表r_p power
			self::$userNode = Db::table('u_r')
								->field('power_id,power_name,controller_name,action_name,parent_id')
								->join('r_p','u_r.r_id=r_p.r_id')
								->join('power','power.power_id=r_p.p_id')
								->where('u_r.u_id',$user_id)
								->select();
    	  // 将查询出来的权限存入session中
			session('userNode',self::$userNode);
		}
	}
	//检测是否登录
	public function isLogin(){
		//检测是否登陆
		if(!session('user_id')){
			$this->redirect('login/login');
		}
	}
	//检测权限
	public function isAccess(){
		//1.获取到当前用户所拥有的权限（使用控制器名称，方法名称） 多个
		 $userNode = session('userNode');
		//2.获取到当前用户访问的控制器名称，方法名称
		 $urlPath =  trim(strtolower(request()->controller()) .'/'.request()->action());
		//3.如果当前访问的用户是admin 直接跳过权限检测
		if(session('user_name') == 'admin'){
			return true;
		}
		//4.如果当前访问的控制器为index 跳过检测
		if( trim(strtolower(request()->controller())) == 'index'){
			return true;
		}
		//5.循环所有权限 和 访问的权限进行比较
		foreach ($userNode as $key => $value) {
			//访问的权限 == 数据库里面的权限
			$dbPath = trim($value['controller_name']).'/'.$value['action_name'];
			//检测有权限访问，返回true 正常运行下部分内容
			if($dbPath == $urlPath){
				return true;
			}
		}
		//没有权限
		$this->error('无权限访问','/login');
	}
}
